# 在python中 相同的运算符对不同的类型有不同的行为
# +运算符将对两个数字执行算术加法
# +运算符将对两个字符串执行拼接加法
# +运算符将对两个列表执行合并加法

# 运算符重载
# print(1 + 2)
# print("a"+"b")
# print([1,2,3] + ["a","b","c"])

# 二维坐标类
class Point:
    def __init__(self, x = 0, y = 0):
        self.x = x
        self.y = y

    # 重写
    # 类内部的 __str__ 函数 控制了实例的输出形式
    # 什么时候回调用__str__方法? 打印实例时会自动调用
    def __str__(self):
        return "({0},{1})".format(self.x,self.y)

    # 什么时候回调用__add__方法? 实例相加时调用
    def __add__(self, other):
        x = self.x + other.x
        y = self.y + other.y
        return Point(x, y)


p1 = Point(1, 2)
p2 = Point(7,8)

# 类内部的 __str__ 函数 控制了实例的输出形式
print(p1) # 等价于print(p1.__str__())

p3 = p1 + p2
print(p3)